package com.ruoyi.chat.mapper;

import java.util.Date;
import java.util.List;

import com.ruoyi.chat.domain.ChatGroup;
import com.ruoyi.chat.domain.ChatUser;
import com.ruoyi.chat.domain.FriendMessage;
import org.apache.ibatis.annotations.Param;

/**
 * 聊天用户Mapper接口
 *

 * @date 2023-07-23
 */
public interface ChatUserMapper
{
    /**
     * 查询聊天用户
     *
     * @param id 聊天用户主键
     * @return 聊天用户
     */
    public ChatUser selectChatUserById(Long id);

    /**
     * 查询聊天用户列表
     *
     * @param chatUser 聊天用户
     * @return 聊天用户集合
     */
    public List<ChatUser> selectChatUserList(ChatUser chatUser);

    /**
     * 新增聊天用户
     *
     * @param chatUser 聊天用户
     * @return 结果
     */
    public int insertChatUser(ChatUser chatUser);

    /**
     * 修改聊天用户
     *
     * @param chatUser 聊天用户
     * @return 结果
     */
    public int updateChatUser(ChatUser chatUser);

    /**
     * 删除聊天用户
     *
     * @param id 聊天用户主键
     * @return 结果
     */
    public int deleteChatUserById(Long id);

    /**
     * 批量删除聊天用户
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteChatUserByIds(Long[] ids);

    /**
     * 查询好友列表
     * @param id
     * @return
     */
    List<ChatUser> selectChatAllUserList(@Param("id") Long id,@Param("friendStatus") Integer friendStatus);

    int deleteUserById(Long id,Long userId);


    /**
     * 查询聊天数据（按条数查不重复好友id的最后size个的聊天数据）
     * @param userId 当前用户id
     */
    List<FriendMessage> selectChatLastNum(@Param("userId") Long userId,@Param("lineNum") Integer lineNum,@Param("size") Integer size);

    /**
     * 查询单个好友聊天数据
     * @param userId 当前用户id
     */
    List<FriendMessage> selectFriendMessage(@Param("userId") Long userId,@Param("friendId") Long friendId,@Param("lineNum") Integer lineNum,@Param("size") Integer size);


    List<ChatGroup> selectChatGroupById(Long userId);


    /**
     * 添加好友
     */
    int addFriend(@Param("userId") Long userId, @Param("friendId") Long friendId, @Param("messageAdd") String messageAdd, @Param("createTime") Date createTime, @Param("friendStatus") Integer friendStatus);

    /**
     * 修改好友关系
     * @param userId
     * @param friendId
     * @param friendStatus
     * @return
     */
    int updateFriendUser(@Param("userId") Long userId,@Param("friendId") Long friendId, @Param("updateTime") Date updateTime, @Param("friendStatus") Integer friendStatus);

    ChatUser getUserBySystemId(Long systemId);

    int insertGroupUser(@Param("userId") Long userId,@Param("groupId") Long groupId,@Param("groupStatus")Integer groupStatus);

    List<ChatUser> selectUserGroupStatus(Long userId);

    /**
     * 根据群主查询申请群的用户
     * @param groupId
     * @return
     */
    List<ChatUser> selectGroupUserList(Long groupId);


    /**
     * 根据群主是否同意用户加入群聊改变中间的状态
     * @param groupId
     * @return
     */
    int updateGroupUsers(@Param("groupId")Long groupId, @Param("userId")Long userId, @Param("groupStatus")Integer groupStatus);
}

